import { AdBase } from "./AdBase";
const qg = window['qg'];

export class AdManager_OV extends AdBase {
    static get ins() {
        return super.getInstance<AdManager_OV>();
    }
    /** (自己)appID */

    /**oppo沙雕老铁 */
    // app_id: string = "31791215";

    /**vivo脑洞天花板 */
    app_id: string = "105768492";

    /** bannerID */
    ad_banner_id: string = "1581563";
    /** 插屏ID */
    ad_inter_id: string = "adunit-efe5e4cb36dbfe44";
    // /** (自己)激励ID */
    // ad_video_id: string = "1581564";
    // /** (自己)激励ID */
    ad_video_id: string = "f7e283bddee04fea8214c3707b4befd7";
    /**开屏ID */
    ad_open_id: string = "1581562";
    /**互推ID */
    ad_more_id: string = "1581560";

    /** (合作)激励ID */
    // ad_video_id: string = "adunit-48d11050934d0f85";


    gameBannerAd: any = null; //互推广告；

    videoBack: Function | null;  //视频广告完成回调
    errorBack: Function | null;  //视频广告失败回调

    /** 加载或者初始化所有广告 */
    loadAllAd() {
        this.initBanner();
        this.initVideoAd();
        this.toMoreGame();
        // this.addShareMenu();
    };
    /** 初始化加载 视频广告 */
    private initVideoAd() {
        let self = this;

        this.ad_video = qg.createRewardedVideoAd({ adUnitId: self.ad_video_id })
        this.ad_video.load().then(() => {
            console.log("视频广告加载完成!");
        }).catch((err: any) => {
            console.log("视频加载失败:", err.errMsg)
        });
        this.ad_video.onError((err: any) => {
            // this.errorVideo();
            console.log("视频出错:", +err);
            // // 再手动加载一次
            // this.ad_video.load().then(() => {
            //     console.log("手动加载成功");
            //     this.ad_video.show();  // 加载成功后需要再显示广告
            // });
        });
        this.ad_video.onClose((res: any) => {
            // 用户点击了【关闭广告】按钮
            // 小于 2.1.0 的基础库版本，res 是一个 undefined
            if (res && res.isEnded || res === undefined) {
                console.log("正常播放结束，可以下发游戏奖励");
                this.finishVideo();
            } else {
                console.log("播放中途退出，不下发游戏奖励");
                this.showModal("未观看完视频", "观看完视频才能获得奖励哦", () => {
                    this.showVideoAd(this.videoBack, this.errorBack)
                }, () => {
                    this.errorVideo();
                });
            }
        });
    };
    /** 初始化加载 banner */
    private initBanner() {
        var self = this;
        let bannerAd = qg.createBannerAd({
            adUnitId: self.ad_banner_id,
            style: { left: 0, top: 0, width: 750 }
        }
        )
        bannerAd.onResize((res: any) => {
            var phone = qg.getSystemInfoSync();
            var w = phone.screenWidth / 2;
            var h = phone.screenHeight;
            bannerAd.style.left = w - res.width / 2 + 0.1;
            bannerAd.style.top = h - res.height + 0.1;
            bannerAd.style.width = phone.screenWidth * 0.8;
            console.log("bannerAd加载成功");
        })
        bannerAd.onError((err: any) => {
            console.log(err)
        });
        this.ad_banner = bannerAd;
    };
    /** 显示Banner广告 */
    public showBanner() {
        if (!this.ad_banner) {
            this.initBanner();
            // return;
        };
        this.ad_banner.show();
    };
    /** 隐藏Banner广告 */
    public hideBanner() {
        if (!this.ad_banner) { return; }
        this.ad_banner.hide();
    };
    /** 播放插屏广告 */
    public showIntersAd() {
        // return;
        // 定义插屏广告
        let interstitialAd = null;
        interstitialAd = qg.createInterstitialAd({
            adUnitId: this.ad_inter_id
        });
        interstitialAd.show().catch((err: any) => {
            console.error(err)
        });
        console.log("showIntersAd");
    }
    /** 播放视频广告  成功回调   失败回调 */
    public showVideoAd(finishBack?: Function, errorBack?: Function) {
        // qg.showToast({
        //     title: '暂无视频广告！',
        //     icon: 'none',
        //     duration: 1500//持续的时间
        // })
        // return;
        this.videoBack = null;
        this.errorBack = null;
        if (finishBack) {
            this.videoBack = finishBack;
        } if (errorBack) {
            this.errorBack = errorBack;
        }

        if (!this.ad_video) {
            this.initVideoAd();
        }

        var self = this;
        this.ad_video.show().then(() => {
            console.log("广告显示成功");
        }).catch((err: any) => {
            // this.errorVideo();
            console.log("广告组件出现问题", err);
            // 再手动加载一次
            this.ad_video.load().then(() => {
                console.log("手动加载成功");
                this.ad_video.show();  // 加载成功后需要再显示广告
            });
        });
    }
    /** 视频播放完成 */
    finishVideo() {
        if (this.videoBack) {
            this.videoBack();
        }
        this.videoBack = null;
        this.errorBack = null;
    }
    /** 视频播放失败 isOut 是否中途退出*/
    errorVideo() {
        if (this.errorBack) {
            this.errorBack();
        }
        this.videoBack = null;
        this.errorBack = null;
    };
    /** 跳转其他更多游戏 */
    toMoreGame() {
        var self = this;
        this.gameBannerAd = qg.createGameBannerAd({
            adUnitId: self.ad_more_id,  //其他游戏的appid(目前为自己的appid)
        });
    };

    /**展示更多游戏 */
    showMoreGame() {
        if (this.gameBannerAd) {
            this.gameBannerAd.show();
        }
    }

    /**隐藏更多游戏 */
    hideMoreGame() {
        if (this.gameBannerAd) {
            this.gameBannerAd.hide();
        }
    }

    /** 震动 */
    vibrate() {
        // console.log("vibrateShort")
        qg.vibrateShort({
            type: 'medium'
        })
    }
    /** 添加桌面功能 */
    addTable() {
    }
    /** 是否已经添加过桌面了 */
    isAddTable() {

    }
    /** 弹框  确定或者取消 */
    showModal(titleStr: string, infoStr: string, finishBack?: any, cancelBack?: any) {
        qg.showModal({
            title: titleStr,
            content: infoStr,
            success(res: any) {
                if (res.confirm) {
                    if (!finishBack) { return; }
                    finishBack();
                    console.log("showModal, 确定");
                } else if (res.cancel) {
                    if (!cancelBack) { return; }
                    cancelBack();
                    console.log("showModal, 取消");
                }
            },
            fail(res: any) {
                console.log(`showModal调用失败` + res);
            },
        });
    }
    exit() {
        qg.exitApplication({});
    }
}